import Cookie from "js-cookie";
// 401拦截
const resp401 = {
  /**
   * 响应数据之前做点什么
   * @param response 响应对象
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {*}
   */
  onFulfilled(response, options) {
    const { message } = options;
    if (response.data.code === 401) {
      message.error("请重新登录");
      setTimeout(() => {
        options.router.push({ path: "/login" });
      }, 800);
    }
    return response;
  }
  /**
   * 响应出错时执行
   * @param error 错误对象
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {Promise<never>}
   */
  // onRejected(error, options) {
  //   const {message} = options
  //   const {response} = error
  //   if (response.status === 401) {
  //     message.error('无此权限')
  //   }
  //   return Promise.reject(error)
  // }
};

const resp403 = {
  onFulfilled(response, options) {
    const { message } = options;
    if (response.data.code === 403) {
      message.error("请求被拒绝");
    }
    return response;
  }
  // onRejected(error, options) {
  //   const {message} = options
  //   const {response} = error
  //   if (response.status === 403) {
  //     message.error('请求被拒绝')
  //   }
  //   return Promise.reject(error)
  // }
};

const resp500 = {
  onFulfilled(response, options) {
    const { message,router } = options;
    if (
      response.data.code === 500 ||
      response.data.code === 405 ||
      response.data.code === 400 ||
      response.data.code === 1
    ) {
      if(router.history.current.path != '/login') message.error(response.data.message);
    }
    return response;
  }
};

const reqCommon = {
  /**
   * 发送请求之前做些什么
   * @param config axios config
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {*}
   */
  onFulfilled(config, options) {
    const { message } = options;
    const { url, commonfCookieName } = config;
    if (
      url.indexOf("api/anon/auth/validate") === -1 &&
      commonfCookieName &&
      !Cookie.get(commonfCookieName)
    ) {
      message.warning("认证 token 已过期，请重新登录");
    }
    return config;
  },
  /**
   * 请求出错时做点什么
   * @param error 错误对象
   * @param options 应用配置 包含: {router, i18n, store, message}
   * @returns {Promise<never>}
   */
  onRejected(error, options) {
    const { message } = options;
    message.error(error.message);
    return Promise.reject(error);
  }
};

export default {
  request: [reqCommon], // 请求拦截
  response: [resp401, resp403, resp500] // 响应拦截
};
